Dieser Audiobeitrag wird von der Universität Erlangen-Nürnberg präsentiert.
Wir wollen wieder ein wenig KI machen und haben uns gestern vor allen Dingen mit Prolog beschäftigt.
Prolog ist eine der großen KI-Programmiersprachen, die im Moment als logische und deklarative Programmiersprache bis jetzt durch nichts ersetzt wurde.
Die andere große Programmiersprache aus der künstlichen Intelligenz, Lisp, ist mittlerweile durch bessere, funktionale Programmiersprachen ersetzt worden.
Je nachdem was ein Mann haben will, Haskell oder F-Sharp oder Scala oder so etwas.
Deswegen benutzen wir Prolog. Die Idee dabei ist, dass wir programmieren dadurch, dass wir Wissen hinschreiben in einer Wissensbank oder einem Prolog-Programm.
Dann starten wir Anfragen, die sich auf induziertes Wissen beziehen.
Alles was aus dieser Wissensbank folgt, können wir in Anfragen abfragen.
Und dieses Frage folgt irgendein Fakt aus irgendeiner Wissensbank, das ist das Programmieren.
Wir haben uns die Syntax angeguckt, die ist sehr einfach.
Beispiel ist so etwas wie Human von Leibniz. Wir haben Prädikate, schreibt man weil sie konstant sind, keine Variablen sind klein.
Dann können wir die anwenden auf andere Terme. Wir haben Variablen.
Und wir machen aus mehreren Termen eine Regel der Form Kopf, Fals, Rumpf, 1 bis bis bis bis bis bis bis Rumpf n.
Das sind die Syntax. Wichtig in Prolog ist am Ende ein Punkt.
Gut. Wie wird Prolog abgearbeitet? Wenn wir eine Anfrage haben, zum Beispiel diese hier, Nut von S von S von Zero.
Dann gehen wir zum Programm, versuchen den Kopf, die erste Anfrage, von denen es mehrere geben kann, mit dem ersten Kopf literal zu matchen.
Wenn das klappt, können wir das, was wir gematcht haben, durch die Body Literale, durch die Rumpf Literale ersetzen.
Hier klappt es nicht, da klappt es. Wir binden X an S von Zero und kriegen also statt dieser Anfrage Nut von S von Zero.
Wir matchen immer von oben nach unten die Köpfe durch und ersetzen durch die Rumpf Literale, wenn es geklappt hat.
Manchmal schlägt das fehl, manchmal, wenn unsere Anfrage eine Variable enthält, bekommen wir Antwort Substitutionen.
Das ist sozusagen das Äquivalent zu einer Was-Frage.
Wichtig dabei ist, dass der Prozess der Berechnung von oben nach unten, von rechts nach links, mit Backtracking ist.
Wenn eine lokale Suche fehlschlägt, muss man zum letzten Auswahlpunkt zurück.
Man geht immer zum nächsten Auswahlpunkt zurück, solange man Auswahlpunkte hat.
Wenn man keine Auswahlpunkte mehr hat und trotzdem fehlgeschlagen ist, dann sagt man, nein, fehlgeschlagen.
Das haben wir an Beispielen durchgezogen und haben uns langsam zu immer komplizierteren Programmierproblemen vorgearbeitet.
Additionen und ähnliche Dinge.
Wir hatten dabei gesehen, dass wir hier nicht funktional programmieren, wir haben bei plus zwei Inputs und als Resultat einen Output.
Wir haben hier drei Argumente, die wir wahlweise als Input oder Output nehmen können.
Sie sind nicht festgelegt und manchmal können wir einfach auch rückwärts rechnen.
Wir können manchmal einfach, wenn wir subtrahieren wollen, Add benutzen und nur an der richtigen Stelle die Variable hinsetzen und dann wird die einfach ausgerechnet.
Wenn unsere Programme vernünftig rückwärts laufen können.
Das ist nicht immer der Fall, das ist zum Beispiel, wenn wir mit echten Zahlen rechnen, ist das nicht der Fall.
Könnte man, dann nennt man das Constraint-Logic-Programming, werden wir uns kurz mit befassen, wenn wir Constraint-Solving machen können.
Aber sonst so zahlenlose Programme können typischerweise auch rückwärts laufen.
Wir haben uns Listen angeguckt, Listen als entweder explizite Listen, wo man sie einfach in der Sequenz mit eckigen Klammern draus hat oder in Kopfrestform, wie Sie das auch aus Funktionalen Programmiersprachen kennen.
Wo man Rekursionen über den Rest hier macht und im Prinzip läuft das ganz genauso.
Als letztes haben wir gesehen, sozusagen eine der Sachen, die die frühen KI-Forscher so begeistert gemacht hat an diesen Dingern, dass man nämlich eigentlich in Prolog ausführbare Spezifikationen hinschreiben kann.
Es reicht die Spezifikation aufzuschreiben, wenn man genug Zeit hat.
Und was gute Prolog-Programmierer können, ist die Spezifikation so aufschreiben, dass sie trotzdem schnell läuft.
Da muss man sich Gedanken darum machen, was von den beiden schreibt man zuerst, welche Klausel schreibt man zuerst.
Und wenn man eine Menge von Rumpfliteralen hat, welche, wie ordnet man die und so weiter und so fort.
Weil das auf den Ablauf des Programms hat das eine Einwirkung.
Und das wollen sie als Programmierer. Sie wollen kontrollieren, wie das Programm abläuft.
Und dann können sie irgendwie die ganze Sache steuern.
Prolog hat, also das ist jetzt nicht alles an Prolog, was es gibt, hat noch ein paar mehr Sachen.
Man kann die Programme hübscher ausfallen lassen, indem man statt ADD von X, Y, Z schreibt, irgendwelche Infix oder Mixfix Notationen macht.
Das geht gut. Oder man kann in Terme reingucken, man kann alle gleich Schabernack machen.
Das überlasse ich Ihnen rauszufinden. Es gibt sehr gute Prolog Tutorials.
Und im Prinzip müssen Sie das üben.
Presenters
Zugänglich über
Offener Zugang
Dauer
01:31:08 Min
Aufnahmedatum
2017-11-09
Hochgeladen am
2017-11-10 16:20:57
Sprache
de-DE